﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;

namespace Website
{
    public partial class StoelenKiezen : System.Web.UI.Page
    {
        private Voorstelling v;
        private int vorigeRij = 0;
        private int eersteTabelGrootte = 0;
        public int tekiezenstoelen = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            v = (Voorstelling)Session["voorstelling"];
            LabelTitel.Text = v.film_naam;

            FilmPosterInfo filmPosterInfo = (FilmPosterInfo)LoadControl("FilmPosterInfo.ascx");
            filmPosterInfo.setgetFilm = v.Film;
            Panel_FilmPosterInfo.Controls.Add(filmPosterInfo);

            tekiezenstoelen = ( (int)Session["adults"] + (int)Session["childeren"] + (int)Session["50plus"] + (int)Session["students"] );

            getParentGuide();
            getAllChairs();
            
        }
        
        private void getParentGuide()
        {
            //Aanzetten van de juiste kijkwijzer leeftijd afbeelding.
            switch (v.Film.minimaleleeftijd.ToString())
            {
                case "0":
                    System.Web.UI.WebControls.Image image = new System.Web.UI.WebControls.Image();
                    image.ImageUrl = Module.IMAGE_FOLDER + "leeftijd_al_klein.png";
                    image.CssClass = "imagepadding";
                    panelParentGuide.Controls.Add(image);
                    break;
                case "6":
                    System.Web.UI.WebControls.Image image1 = new System.Web.UI.WebControls.Image();
                    image1.ImageUrl = Module.IMAGE_FOLDER + "leeftijd_6_klein.png";
                    image1.CssClass = "imagepadding";
                    panelParentGuide.Controls.Add(image1);
                    break;
                case "9":
                    System.Web.UI.WebControls.Image image2 = new System.Web.UI.WebControls.Image();
                    image2.ImageUrl = Module.IMAGE_FOLDER + "leeftijd_9_klein.png";
                    image2.CssClass = "imagepadding";
                    panelParentGuide.Controls.Add(image2);
                    break;
                case "12":
                    System.Web.UI.WebControls.Image image3 = new System.Web.UI.WebControls.Image();
                    image3.ImageUrl = Module.IMAGE_FOLDER + "leeftijd_12_klein.png";
                    image3.CssClass = "imagepadding";
                    panelParentGuide.Controls.Add(image3);
                    break;
                case "16":
                    System.Web.UI.WebControls.Image image4 = new System.Web.UI.WebControls.Image();
                    image4.ImageUrl = Module.IMAGE_FOLDER + "leeftijd_16_klein.png";
                    image4.CssClass = "imagepadding";
                    panelParentGuide.Controls.Add(image4);
                    break;
            }

            if (v.Film.pauze)
            {
                System.Web.UI.WebControls.Image image = new System.Web.UI.WebControls.Image();
                image.CssClass = "imagepadding";
                image.ImageUrl = Module.IMAGE_FOLDER + "pauze.png";
                panelParentGuide.Controls.Add(image);
            }

            if (v.Film._3d)
            {
                System.Web.UI.WebControls.Image image = new System.Web.UI.WebControls.Image();
                image.CssClass = "imagepadding";
                image.ImageUrl = Module.IMAGE_FOLDER + "3d.png";
                panelParentGuide.Controls.Add(image);
            }

        }

        private void getAllChairs()
        {
            //Haalt alle vrije stoelen op
            List<Stoel> vrijestoelen = getFreeChairs();

            var rijen = from r in v.Zaal.Rijs
                        orderby r.nummer descending
                        select r;

            foreach (var rij in rijen)
            {
                if (vorigeRij == 0)
                {
                    vorigeRij = rij.Stoels.Count();
                    eersteTabelGrootte = rij.Stoels.Count();
                }

                //Controleert ofdat er al een tabel bestaat met de zelfde rij grootte en
                //Controleert ofdat de rij even groot is als de vorige rij
                if (rij.Stoels.Count() == vorigeRij && (eersteTabelGrootte == vorigeRij))
                {
                    TableRow tabelrij = new TableRow();

                    //Maakt nieuwe cell aan in de tabel met een button(zitplaats)
                    TableCell cellRijNummer = new TableCell();
                    Label lbl = new Label();
                    lbl.Font.Bold = true;
                    lbl.Text = rij.nummer.ToString();
                    lbl.Visible = true;
                    cellRijNummer.Controls.Add(lbl);
                    tabelrij.Cells.Add(cellRijNummer);

                    foreach (var stoel in rij.Stoels)
                    {
                        TableCell cellStoelNummer = new TableCell();

                        Button b = new Button();
                        b.Font.Bold = true;
                        b.Text = stoel.nummer.ToString();
                        b.Height = 40;
                        b.Width = 40;
                        b.UseSubmitBehavior = false;

                        //Controleert ofdat de stoel vrij is
                        if (vrijestoelen.Contains(stoel))
                        {
                            b.BackColor = Color.Green;
                            b.Enabled = true;
                            b.OnClientClick = "if(this.style.backgroundColor=='Orange'){this.style.backgroundColor='Green';remove('" + rij.nummer + ":'+this.value);}else{if(aantalstoelen<maxaantalstoelen){aantalstoelen++;this.style.backgroundColor='Orange';stoelengeselecteerd[stoelengeselecteerd.length] = '" + rij.nummer + ":'+this.value;}else{alert('U kunt niet meer dan '+maxaantalstoelen+' stoelen selecteren.')}};document.getElementById('" + gekozenstoelenarray.ClientID + "').value = stoelengeselecteerd;return true;";
                        }
                        else
                        {
                            b.BackColor = Color.Red;
                            b.Enabled = false;
                        }
                        b.Visible = true;

                        cellStoelNummer.Controls.Add(b);
                        tabelrij.Cells.Add(cellStoelNummer);
                    }

                    Table1.Rows.Add(tabelrij);
                }
                else
                {
                    Table table2 = new Table();
                    table2.CssClass = "ChooseChairTable";

                    TableRow tabelrij = new TableRow();

                    TableCell cellRijNummer = new TableCell();
                    Label lbl = new Label();
                    lbl.Font.Bold = true;
                    lbl.Text = rij.nummer.ToString();
                    lbl.Visible = true;
                    cellRijNummer.Controls.Add(lbl);
                    tabelrij.Cells.Add(cellRijNummer);

                    foreach (var stoel in rij.Stoels)
                    {
                        TableCell cellStoelNummer = new TableCell();

                        Button b = new Button();
                        b.Font.Bold = true;
                        b.Text = stoel.nummer.ToString();
                        b.Height = 40;
                        b.Width = 40;
                        b.UseSubmitBehavior = false;
                        if (vrijestoelen.Contains(stoel))
                        {
                            b.BackColor = Color.Green;
                            b.Enabled = true;
                            b.OnClientClick = "if(this.style.backgroundColor=='Orange'){this.style.backgroundColor='Green';remove('" + rij.nummer + ":'+this.value);}else{if(aantalstoelen<maxaantalstoelen){aantalstoelen++;this.style.backgroundColor='Orange';stoelengeselecteerd[stoelengeselecteerd.length] = '" + rij.nummer + ":'+this.value;}else{alert('U kunt niet meer dan '+maxaantalstoelen+' stoelen selecteren.')}};document.getElementById('" + gekozenstoelenarray.ClientID + "').value = stoelengeselecteerd;return true;";
                        }
                        else
                        {
                            b.BackColor = Color.Red;
                            b.Enabled = false;
                        }
                        b.Visible = true;

                        cellStoelNummer.Controls.Add(b);
                        tabelrij.Cells.Add(cellStoelNummer);
                    }

                    table2.Rows.Add(tabelrij);
                    PanelStoelen.Controls.Add(table2);
                }
                

                vorigeRij = rij.Stoels.Count();
            }
            
        }

        private List<Stoel> getFreeChairs()
        {
            var stoelen = from s in Module.database.Stoels
                          where s.zaal_nummer == v.zaal_nummer
                          orderby s.rij_nummer descending, s.nummer ascending
                          select s;

            List<Stoel> vrijestoelen = new List<Stoel>();

            foreach (var s in stoelen)
            {
                TimeSpan temp = DateTime.Now.AddHours(2) - DateTime.Now;
                double test = temp.TotalMinutes;

                var tickets = from t in Module.database.Tickets
                              where t.Stoel == s && (t.Voorstelling == v && t.status_naam == "betaald" || (t.status_naam == "gereserveerd" && (t.Voorstelling.datumtijd - DateTime.Now).TotalMinutes >= 45))
                              select t;

                if (tickets.Count() == 0)
                {
                    vrijestoelen.Add(s);
                }
            }

            return vrijestoelen;
        }

        protected void ButtonVolgende_Click(object sender, EventArgs e)
        {
            string arr = gekozenstoelenarray.Text;
            string[] words = arr.Split(',');
            Session["gekozenStoelen"] = words;

            if (words.Length < tekiezenstoelen)
            {
                //MessageBox.Show("U dient nog " + (tekiezenstoelen - words.Length) + " stoelen te selecteren.");
            }
            else
            {
                List<Stoel> stoelen = new List<Stoel>();

                foreach (string w in words)
                {
                    string[] temp = w.Split(':');
                    int zaalnummer = v.zaal_nummer;
                    int rijnummer = Convert.ToInt32(temp[0]);
                    int stoelnummer = Convert.ToInt32(temp[1]);

                    var resultaat = from s in Module.database.Stoels
                                    where s.nummer == stoelnummer && s.rij_nummer == rijnummer && s.zaal_nummer == zaalnummer
                                    select s;

                    stoelen.Add(resultaat.First());
                }

                String status = "betaald";
                Reservering reservering = null;
                if (((string)Session["bestelwijze"]).Equals("Reserveren"))
                {
                    status = "gereserveerd";
                    reservering = new Reservering { };
                    Module.database.Reserverings.InsertOnSubmit(reservering);
                    Session["reservering"] = reservering;
                }

                for (int i = 0; i < (int)Session["adults"]; i++)
                {
                    Stoel stoel = stoelen.First();
                    Ticket ticket = new Ticket { stoel_nummer = stoel.nummer, rij_nummer = stoel.rij_nummer, zaal_nummer = stoel.zaal_nummer, voorstelling_datumtijd = v.datumtijd, film_naam = v.film_naam, tickettype_naam = "volwassen", status_naam = status };
                    if (reservering != null) { ticket.Reservering = reservering; }
                    Module.database.Tickets.InsertOnSubmit(ticket);
                    stoelen.Remove(stoel);
                }

                for (int i = 0; i < (int)Session["childeren"]; i++)
                {
                    Stoel stoel = stoelen.First();
                    Ticket ticket = new Ticket { stoel_nummer = stoel.nummer, rij_nummer = stoel.rij_nummer, zaal_nummer = stoel.zaal_nummer, voorstelling_datumtijd = v.datumtijd, film_naam = v.film_naam, tickettype_naam = "kind", status_naam = status };
                    if (reservering != null) { ticket.Reservering = reservering; }
                    Module.database.Tickets.InsertOnSubmit(ticket);
                    stoelen.Remove(stoel);
                }

                for (int i = 0; i < (int)Session["50plus"]; i++)
                {
                    Stoel stoel = stoelen.First();
                    Ticket ticket = new Ticket { stoel_nummer = stoel.nummer, rij_nummer = stoel.rij_nummer, zaal_nummer = stoel.zaal_nummer, voorstelling_datumtijd = v.datumtijd, film_naam = v.film_naam, tickettype_naam = "50+", status_naam = status };
                    if (reservering != null) { ticket.Reservering = reservering; }
                    Module.database.Tickets.InsertOnSubmit(ticket);
                    stoelen.Remove(stoel);
                }

                for (int i = 0; i < (int)Session["students"]; i++)
                {
                    Stoel stoel = stoelen.First();
                    Ticket ticket = new Ticket { stoel_nummer = stoel.nummer, rij_nummer = stoel.rij_nummer, zaal_nummer = stoel.zaal_nummer, voorstelling_datumtijd = v.datumtijd, film_naam = v.film_naam, tickettype_naam = "CJP/student", status_naam = status };
                    if (reservering != null) { ticket.Reservering = reservering; }
                    Module.database.Tickets.InsertOnSubmit(ticket);
                    stoelen.Remove(stoel);
                }

                Response.Redirect("Prijsoverzicht.aspx");
            }
        }
    }
}